﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SusyGame_Model;
using SusyGame_Controller;

namespace SusyGame_Demo
{
    class Program
    {
        static void Main(string[] args)
       {
            ////Creamos lo necesario para realizaer el juego
            //Player player;
            //Map map = null;
            //MapController mapControl = new MapController();
            //Defender defend;
            //Enemy enemy;
            //Obstacle obstacle;
            //int opcionAgregar;
            //int opcDef, tipoObst, x=0, y=0;
            //int mapType = 0;
            //int countMSource = 0;

            //Random rand = new Random();

            //List<Defender> listTypeDefenders = new List<Defender>(); //Lista de defensores
            //List<Enemy> listTypeEnemies = new List<Enemy>(); //Lista de defensores
            //List<Obstacle> listTypeObstacle = new List<Obstacle>() ; // Lista de obstáculos
            //MoneySource mSource = new MoneySource();
            //Obstacle mObstacle;
            //Message message = new Message();
            
            ////Creamos un mensaje de bienvenida al usuario
            //player = message.welcome(ref mapType, ref map);

            ////Creamos una lista de todos los tipos de defensores disponibles
            //for (int j = 0; j < 4; j++)
            //{
            //    defend = new Defender(j+1);
            //    listTypeDefenders.Add(defend);
            //}

            //for (int j = 0; j < 2; j++)
            //{
            //    enemy = new Enemy(j + 1);
            //    listTypeEnemies.Add(enemy);
            //} 

            //for (int j = 0; j < 3; j++)
            //{
            //    obstacle = new Obstacle(j + 1);
            //    listTypeObstacle.Add(obstacle);
            //} 


            ////CONTROLADOR DE TIEMPO
            //for (int i = 0; i < 15; i++)
            //{
            //    //Opciones dadas al usuario para jugar
            //    Console.WriteLine("Puntos disponibles: "+player.Points);
            //    Console.WriteLine("Que desea hacer:");
            //    Console.WriteLine("1) Agregar Defensor");
            //    Console.WriteLine("2) Agregar Cédula ("+mSource.Price+" puntos)");
            //    Console.WriteLine("3) Agregar Obstáculo");
            //    Console.WriteLine("4) Pasar turno");
            //    Console.WriteLine("5) Salir");

            //    //Leemos la opcion
            //    opcionAgregar = Convert.ToInt32(Console.ReadLine());
            //    Console.WriteLine();

            //    //AGREGAR UN DEFENSOR
            //    if (opcionAgregar == 1)
            //    {
            //        //Muestra los defensores disponibles para agregar
            //        for (int k = 0; k < 4; k++){
            //            if (listTypeDefenders[k].TypeLand==1)
            //                Console.WriteLine("" + (k + 1) + ") Nombre: " + listTypeDefenders[k].Name + " - Precio: " + listTypeDefenders[k].Price + " - Tipo de suelo: Grass");
            //            else
            //                Console.WriteLine("" + (k + 1) + ") Nombre: " + listTypeDefenders[k].Name + " - Precio: " + listTypeDefenders[k].Price + " - Tipo de suelo: Agua");
            //        }

            //        //Lee la opcion de defensor a agregar
            //        opcDef = Convert.ToInt32(Console.ReadLine());

            //        //Verifica de que el jugador tenga puntos suficientes para agregar el defensor elegido
            //        if (player.Points < listTypeDefenders[opcDef - 1].Price)
            //            //No tiene puntos suficientes
            //            Console.WriteLine("No tiene puntos suficientes para agregar al defensor " + opcDef + "\n");
            //        else //Si tiene puntos suficientes
            //        {
            //            //Va a leer y validar la posicion en que puede agregar al defensor
            //            int posVal = mapControl.CheckPositionDefense(mapType, listTypeDefenders[opcDef-1], ref x, ref y);
            //            if (posVal == 1)
            //            {
            //                player.Points -= listTypeDefenders[opcDef - 1].Price;
            //                //Va a agregar  el elemento, verificando que no haya un enemigo en esa posicion
            //                mapControl.AddDefender(map.MapV, x-1, y-1, listTypeDefenders[opcDef-1]);
            //                //map.PrintMap();
            //            }
            //            else
            //            {
            //                message.ErrorPos();
            //            }
            //        }                    
            //    }
            //    else
            //    {
            //        //AGREGAR UNA CEDULA
            //        if (opcionAgregar == 2)
            //        {
            //            //Verifica de que el jugador tenga puntos suficientes para agregar una cedula
            //            if (player.Points < mSource.Price)
            //                Console.WriteLine("No tiene puntos suficientes para agregar una cedula\n");
            //            else
            //            {
            //                countMSource++;
            //                int posVal = mapControl.CheckPositionDefense(mapType, null, ref x, ref y);
            //                if (posVal == 1)
            //                {
            //                    //Va a agregar la cedula, verificando que no haya un enemigo en esa posicion
            //                    player.Points -= mSource.Price;
            //                    mapControl.AddMoneySource(map.MapV, x-1, y-1, mSource);
            //                    //map.PrintMap();                                
            //                }
            //                else
            //                {
            //                    message.ErrorPos();
            //                }
            //            }
            //        }
            //        else
            //        {   //Agregar Obstaculo
            //            if (opcionAgregar == 3)
            //            {  
            //                for (int j = 0; j < 3; j++){
            //                if (listTypeObstacle[j].Tland==1)
            //                Console.WriteLine("" + (j + 1) + ") Obstaculo: " + listTypeObstacle[j].Name + " - Precio: " + listTypeObstacle[j].Price + " - Tipo de suelo: Grass");
            //                else
            //                Console.WriteLine("" + (j + 1) + ") Obstaculo: " + listTypeObstacle[j].Name + " - Precio: " + listTypeObstacle[j].Price + " - Tipo de suelo: Agua");
            //                Console.WriteLine();
            //                }
            //                tipoObst = Convert.ToInt32(Console.ReadLine());
            //                mObstacle = new Obstacle(tipoObst);
            //                int posObs = mapControl.CheckPositionDefense(tipoObst, null, ref x, ref y);
            //                if (posObs == 1)
            //                {
            //                    mapControl.AddLObstacle(map.MapV, x - 1, y - 1, mObstacle);
            //                    //map.PrintMap();
            //                }
            //                else
            //                {
            //                    Console.WriteLine("Posiciones invalidas");
            //                }
            //            }
            //            //OPCION SALIR
            //            else
            //                if (opcionAgregar == 5)
            //                {
            //                    break;
            //                }
            //        }
            //    }

            //    //GENERAR UN ENEMIGO
            //    if (((i + 1) % 3) == 0)
            //    {
            //        int typeEnemy = 0;
            //        bool ok = false;
            //        y = 30;
                    
            //        //Se realizara el bucle hasta que logre agregar un enemigo
            //        while (!ok)
            //        {
            //            typeEnemy = rand.Next(1, 3); //Generamos un tipo de enemigo
            //            x = rand.Next(1, 13); //Generamos una posicion aleatoria para agregar al enemigo
            //            ok = mapControl.CheckPositionEnemy(map, listTypeEnemies[typeEnemy - 1], x, y); //Verificamos que sea posible agregarlo en el mapa
            //        }
            //        //Una vez verificado, procede a agregarlo al mapa
            //        mapControl.AddEnemy(map.MapV, x - 1 , y - 1, listTypeEnemies[typeEnemy - 1]);
            //        //map.PrintMap();
            //    }

            //    //De acuerdo al tiempo transcurrido agregamos el puntaje por las cedulas creadas
            //    if ((i+1)%(mSource.Time) == 0)
            //    {
            //        player.Points += countMSource * mSource.PointsGiven;
            //    }
            //}
        }
    }
}
